#ifndef TRIGGERTIMER_H
#define TRIGGERTIMER_H

#include <iostream>
#include <chrono>
#include <thread>
#include <atomic>  // 用于原子变量

constexpr int TriggerTimer_flagNumber = 1;

class TriggerTimer
{
public:
	TriggerTimer();   // 构造函数
	~TriggerTimer();  // 析构函数

	// 启动定时器，间隔为 1 毫秒，持续标志时间为 10 毫秒
	bool Start(int interval);

	// 停止定时器
	void Stop();

	// 获取指定通道的标志
	bool GetFlag(int channel) const { return flag[channel].load(); }

	// 手动将指定通道的标志设置为 false
	void ResetFlag(int channel) { flag[channel].store(false); }

private:
	bool running;  // 定时器是否正在运行
	std::atomic<bool> flag[TriggerTimer_flagNumber];  // 定时器标志，原子变量保证线程安全
	std::chrono::steady_clock::time_point flagSetTime[TriggerTimer_flagNumber];  // 每个通道标志设置时间
	std::chrono::steady_clock::time_point start_time;  // 记录开始时间
	int interval_ms;  // 间隔时间，单位毫秒
	int flag_duration_ms;  // 标志持续时间，单位毫秒
	std::atomic<bool> enabled[TriggerTimer_flagNumber]; // 记录该通道是否已经被使能过

	// 定时器回调函数
	void TimerCallback();
};

extern TriggerTimer triggerTimer;

#endif // TRIGGERTIMER_H
